#pragma once
#include "dynamic_library.h"

class DYNAMIC_LIBRARY SkeletonNode
{
public:

        int index;
        float x,y,z;

        SkeletonNode()
        {
                x = y = z = 0;
        }

        SkeletonNode(float X, float Y, float Z, int newIndex)
        {
                this->x = X;
                this->y = Y;
                this->z = Z;

                this->index = newIndex;
        }

        SkeletonNode(SkeletonNode * n, int newIndex)
        {
                this->x = n->x;
                this->y = n->y;
                this->z = n->z;

                this->index = newIndex;
        }

        SkeletonNode(const SkeletonNode & from)
        {
                this->x = from.x;
                this->y = from.y;
                this->z = from.z;
                this->index = from.index;
        }

        static SkeletonNode * Midpoint(SkeletonNode * n1, SkeletonNode * n2, int index)
        {
                float x = (n1->x + n2->x) / 2;
                float y = (n1->y + n2->y) / 2;
                float z = (n1->z + n2->z) / 2;

                return new SkeletonNode(x, y, z, index);
        }

        void set(float X, float Y, float Z)
        {
                this->x = X;
                this->y = Y;
                this->z = Z;
        }

        void set(float * pos)
        {
                this->x = pos[0];
                this->y = pos[1];
                this->z = pos[2];
        }

        float distanceTo(SkeletonNode * n2)
        {
                float X = x - n2->x;
                float Y = y - n2->y;
                float Z = z - n2->z;

                return sqrt(X * X + Y * Y + Z * Z);
        }

#ifdef false        
        operator const Vec() const{
                return Vec(x,y,z);
        }

        Vec v() const
        {
                return Vec(x,y,z);
        }
#endif
};
